﻿using System;
using System.Reflection;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NHibernate;
using NHibernate.Criterion;
using JuridicoDataLibrary.Model;
using JuridicoDataLibrary.Helper;
using JuridicoWeb.Utils;

namespace JuridicoWeb.DataTransferLayer.Persistence
{
    /// <summary>
    /// Summary description for UsuarioDao
    /// </summary>
    public class UsuarioDao
    {
        public UsuarioDao()
        {
        }

        /// <summary>
        /// Verifica o login e senha informado para o usuário, se um dos dois não bater não será 
        /// possível efetuar o logon no sistema.
        /// </summary>
        /// <param name="login">Login do usuário</param>
        /// <param name="senha">Senha do usuário</param>
        /// <returns>Boolean</returns>
        public bool ValidarUsuario(string login, string senha)
        {
            try
            {
                using (var session = HibernateHelper.OpenSession())
                {
                    ICriteria criteria = session.CreateCriteria(typeof(Usuario));
                    ICriterion _login = Restrictions.Eq("sLogin", login);
                    //ICriterion _senha = Restrictions.Eq("sSenha", Application.Md5AddSecret(senha));
                    ICriterion _senha = Restrictions.Eq("sSenha", senha);

                    criteria.Add(_login);
                    criteria.Add(_senha);

                    return (criteria.UniqueResult() != null);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// Lista todos os usuários cadastrados
        /// </summary>
        /// <returns>IList</returns>
        public IList ListarUsuarios()
        {
            try
            {
                using (var session = HibernateHelper.OpenSession())
                {
                    return session.CreateCriteria(typeof(Usuario)).List();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// Lista os dados de um determinado usuário por seu login
        /// </summary>
        /// <param name="login">Login do usuário</param>
        /// <returns>IList</returns>
        public IList ListarUsuarios(string login)
        {
            try
            {
                using (var session = HibernateHelper.OpenSession())
                {
                    return session.CreateCriteria(typeof(Usuario))
                        .Add(Restrictions.Eq("sLogin", login)).List();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// Lista os dados de um determinado usuário por seu id
        /// </summary>
        /// <param name="id">Código de identificação do usuário</param>
        /// <returns></returns>
        public IList ListarUsuarios(int id)
        {
            try
            {
                using (var session = HibernateHelper.OpenSession())
                {
                    return session.CreateCriteria(typeof(Usuario))
                        .Add(Restrictions.Eq("nCodUsuario", id)).List();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}